package constants;

import client.MapleCharacter;
import client.MapleClient;
import client.PlayerStats;
import client.Skill;
import client.SkillFactory;
import client.inventory.Equip;
import client.inventory.MapleInventoryType;
import client.status.MonsterStatus;
import database.DatabaseConnection;
import java.awt.Point;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import server.MapleItemInformationProvider;
import server.MapleStatEffect;
import server.maps.MapleMapObjectType;
import tools.FileoutputUtil;
import tools.MaplePacketCreator;
import tools.Pair;

public class GameConstants {

    public static boolean GMS = false;
    public static final Map<Integer, Integer> advanceskill = new HashMap<>();
    public static final List<MapleMapObjectType> rangedMapobjectTypes = Collections.unmodifiableList(Arrays.asList(new MapleMapObjectType[]{
            MapleMapObjectType.ITEM,
            MapleMapObjectType.MONSTER,
            MapleMapObjectType.DOOR,
            MapleMapObjectType.REACTOR,
            MapleMapObjectType.SUMMON,
            MapleMapObjectType.NPC,
            MapleMapObjectType.MIST,
            MapleMapObjectType.FAMILIAR,
            MapleMapObjectType.EXTRACTOR}));
    public static final int[] CygnusLink = {80000066, 80000067, 80000068, 80000069, 80000070};
    private static final int[] closeness = {0, 1, 3, 6, 14, 31, 60, 108, 181, 287, 434, 632, 891, 1224, 1642, 2161, 2793, 3557, 4467, 5542, 6801, 8263, 9950, 11882, 14084, 16578, 19391, 22547, 26074, 30000};
    private static final int[] setScore = {0, 10, 100, 300, 600, 1000, 2000, 4000, 7000, 10000};
    private static final int[] cumulativeTraitExp = {0, 20, 46, 80, 124, 181, 255, 351, 476, 639, 851, 1084, 1340, 1622, 1932, 2273, 2648, 3061, 3515, 4014, 4563, 5128, 5710, 6309, 6926, 7562, 8217, 8892, 9587, 10303, 11040, 11788, 12547, 13307, 14089, 14883, 15689, 16507, 17337, 18179, 19034, 19902, 20783, 21677, 22584, 23505, 24440, 25399, 26362, 27339, 28331, 29338, 30360, 31397, 32450, 33519, 34604, 35705, 36823, 37958, 39110, 40279, 41466, 32671, 43894, 45135, 46395, 47674, 48972, 50289, 51626, 52967, 54312, 55661, 57014, 58371, 59732, 61097, 62466, 63839, 65216, 66597, 67982, 69371, 70764, 72161, 73562, 74967, 76376, 77789, 79206, 80627, 82052, 83481, 84914, 86351, 87792, 89237, 90686, 92139, 93596, 96000};

    private static final int[] mobHpVal = {0, 15, 20, 25, 35, 50, 65, 80, 95, 110, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 405, 435, 465, 495, 525, 580, 650, 720, 790, 900, 990, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2520, 2640, 2760, 2880, 3000, 3200, 3400, 3600, 3800, 4000, 4300, 4600, 4900, 5200, 5500, 5900, 6300, 6700, 7100, 7500, 8000, 8500, 9000, 9500, 10000, 11000, 12000, 13000, 14000, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 29000, 31000, 33000, 35000, 37000, 39000, 41000, 43000, 45000, 47000, 49000, 51000, 53000, 55000, 57000, 59000, 61000, 63000, 65000, 67000, 69000, 71000, 73000, 75000, 77000, 79000, 81000, 83000, 85000, 89000, 91000, 93000, 95000, 97000, 99000, 101000, 103000, 105000, 107000, 109000, 111000, 113000, 115000, 118000, 120000, 125000, 130000, 135000, 140000, 145000, 150000, 155000, 160000, 165000, 170000, 175000, 180000, 185000, 190000, 195000, 200000, 205000, 210000, 215000, 220000, 225000, 230000, 235000, 240000, 250000, 260000, 270000, 280000, 290000, 300000, 310000, 320000, 330000, 340000, 350000, 360000, 370000, 380000, 390000, 400000, 410000, 420000, 430000, 440000, 450000, 460000, 470000, 480000, 490000, 500000, 510000, 520000, 530000, 550000, 570000, 590000, 610000, 630000, 650000, 670000, 690000, 710000, 730000, 750000, 770000, 790000, 810000, 830000, 850000, 870000, 890000, 910000};

    private static final int[] pvpExp = {0, 3000, 6000, 12000, 24000, 48000, 960000, 192000, 384000, 768000};

    private static final int[] guildExp = {0, 20000, 160000, 540000, 1280000, 2500000, 4320000, 6860000, 10240000, 14580000};

    private static final int[] mountExp = {0, 6, 25, 50, 105, 134, 196, 254, 263, 315, 367, 430, 543, 587, 679, 725, 897, 1146, 1394, 1701, 2247, 2543, 2898, 3156, 3313, 3584, 3923, 4150, 4305, 4550};

    private static final int[] professionExp = {0, 250, 600, 1050, 1600, 2250, 3000, 3850, 4900, 5850, 45000, 160000};

    public static final int[] itemBlock = {2430112, 4001168, 3993003, 2340000, 2049100, 4001129, 2040727, 2040037, 2040006, 2040007, 2040303, 2040403, 2040506, 2040507, 2040603, 2040709, 2040710, 2040711, 2040806, 2040903, 2041024, 2041025, 2043003, 2043103, 2043203, 2043303, 2043703, 2043803, 2044003, 2044103, 2044203, 2044303, 2044403, 2044503, 2044603, 2044908, 2044815, 2044019, 2044703};
    public static final int JAIL = 180000001;
    public static final int MAX_BUFFSTAT = 1;
    public static final int MAX_MONSTERSTATUS = 1;
    public static final String[] RESERVED = {"Rental", "Donor"};
    public static final String[] stats = {"tuc", "reqLevel", "reqJob", "reqSTR", "reqDEX", "reqINT", "reqLUK", "reqPOP", "cash", "cursed", "success", "setItemID", "equipTradeBlock", "durability", "randOption", "randStat", "masterLevel", "reqSkillLevel", "elemDefault", "incRMAS", "incRMAF", "incRMAI", "incRMAL", "canLevel", "skill", "charmEXP", "limitBreak","imdR","bdR", "limitedLv", "superiorEqp", "maxSuperiorEqp"};

    public static final int[] hyperTele = {310000000, 220000000, 100000000, 250000000, 240000000, 104000000, 103000000, 102000000, 101000000, 120000000, 260000000, 200000000, 230000000};

    public static final int[] goldrewards = {2049400, 1, 2049401, 2, 2049301, 2, 2340000, 1, 2070007, 2, 2070016, 1, 2330007, 1, 1402037, 1, 2290096, 1, 2290049, 1, 2290041, 1, 2290047, 1, 2290095, 1, 2290017, 1, 2290075, 1, 2290085, 1, 2290116, 1, 1302059, 3, 2049100, 1, 1092049, 1, 1102041, 1, 1432018, 3, 1022047, 3, 3010051, 1, 3010020, 1, 2040914, 1, 1432011, 3, 1442020, 3, 1382035, 3, 1372010, 3, 1332027, 3, 1302056, 3, 1402005, 3, 1472053, 3, 1462018, 3, 1452017, 3, 1422013, 3, 1322029, 3, 1412010, 3, 1472051, 1, 1482013, 1, 1492013, 1, 1382049, 1, 1382050, 1, 1382051, 1, 1382052, 1, 1382045, 1, 1382046, 1, 1382047, 1, 1382048, 1, 1372035, 1, 1372036, 1, 1372037, 1, 1372038, 1, 1372039, 1, 1372040, 1, 1372041, 1, 1372042, 1, 1332032, 8, 1482025, 7, 4001011, 8, 4001010, 8, 4001009, 8, 2047000, 1, 2047001, 1, 2047002, 1, 2047100, 1, 2047101, 1, 2047102, 1, 2047200, 1, 2047201, 1, 2047202, 1, 2047203, 1, 2047204, 1, 2047205, 1, 2047206, 1, 2047207, 1, 2047208, 1, 2047300, 1, 2047301, 1, 2047302, 1, 2047303, 1, 2047304, 1, 2047305, 1, 2047306, 1, 2047307, 1, 2047308, 1, 2047309, 1, 2046004, 1, 2046005, 1, 2046104, 1, 2046105, 1, 2046208, 1, 2046209, 1, 2046210, 1, 2046211, 1, 2046212, 1, 1002801, 2, 1102205, 2, 1402046, 2, 1402047, 2, 1462054, 2, 1462055, 2, 1472074, 2, 1332077, 1, 1402049, 1, 1462053, 1, 1472072, 1, 1492047, 1, 1032080, 20, 1032081, 15, 1032082, 10, 1032083, 5, 1032084, 1, 1112435, 20, 1112436, 15, 1112437, 10, 1112438, 5, 1112439, 1, 1122081, 20, 1122082, 15, 1122083, 10, 1122084, 5, 1122085, 1, 1132036, 20, 1132037, 15, 1132038, 10, 1132039, 5, 1132040, 1, 1092070, 40, 1092071, 30, 1092072, 20, 1092073, 10, 1092074, 1, 1092075, 40, 1092076, 30, 1092077, 20, 1092078, 10, 1092079, 1, 1092080, 40, 1092081, 30, 1092082, 20, 1092083, 10, 1092084, 1, 1092087, 1, 1092088, 1, 1302143, 40, 1302144, 30, 1302145, 20, 1302146, 10, 1302147, 1, 1312058, 40, 1312059, 30, 1312060, 20, 1312061, 10, 1312062, 1, 1322086, 40, 1322087, 30, 1322088, 20, 1322089, 10, 1322090, 1, 1332116, 40, 1332117, 30, 1332118, 20, 1332119, 10, 1332120, 1, 1332121, 40, 1332122, 30, 1332123, 20, 1332124, 10, 1332125, 1, 1342029, 40, 1342030, 30, 1342031, 20, 1342032, 10, 1342033, 1, 1372074, 40, 1372075, 30, 1372076, 20, 1372077, 10, 1372078, 1, 1382095, 40, 1382096, 30, 1382097, 20, 1382098, 10, 1392099, 1, 1402086, 40, 1402087, 30, 1402088, 20, 1402089, 10, 1402090, 1, 1412058, 40, 1412059, 30, 1412060, 20, 1412061, 10, 1412062, 1, 1422059, 40, 1422060, 30, 1422061, 20, 1422062, 10, 1422063, 1, 1432077, 40, 1432078, 30, 1432079, 20, 1432080, 10, 1432081, 1, 1442107, 40, 1442108, 30, 1442109, 20, 1442110, 10, 1442111, 1, 1452102, 40, 1452103, 30, 1452104, 20, 1452105, 10, 1452106, 1, 1462087, 40, 1462088, 30, 1462089, 20, 1462090, 10, 1462091, 1, 1472113, 40, 1472114, 30, 1472115, 20, 1472116, 10, 1472117, 1, 1482075, 40, 1482076, 30, 1482077, 20, 1482078, 10, 1482079, 1, 1492075, 40, 1492076, 30, 1492077, 20, 1492078, 10, 1492079, 1, 1132012, 2, 1132013, 1, 1032031, 1, 1102172, 1, 1002776, 1, 1002777, 1, 1002778, 1, 1002779, 1, 1002780, 1, 1082234, 1, 1082235, 1, 1082236, 1, 1082237, 1, 1082238, 1, 1052155, 1, 1052156, 1, 1052157, 1, 1052158, 1, 1052159, 1, 1072355, 1, 1072356, 1, 1072357, 1, 1072358, 1, 1072359, 1, 1092057, 1, 1092058, 1, 1092059, 1, 1122012, 1, 1302081, 1, 1312037, 1, 1322060, 1, 1332073, 1, 1332074, 1, 1372044, 1, 1382057, 1, 1402046, 1, 1412033, 1, 1422037, 1, 1432047, 1, 1442063, 1, 1452057, 1, 1462050, 1, 1472068, 1, 1482023, 1, 1492023, 1, 1342011, 1, 1522015, 1, 1532015, 1, 1003280, 1, 1003281, 1, 1003282, 1, 1003283, 1, 1003284, 1, 1052374, 1, 1052375, 1, 1052376, 1, 1052377, 1, 1052378, 1, 1072544, 1, 1072545, 1, 1072546, 1, 1072547, 1, 1072548, 1, 1082328, 1, 1082329, 1, 1082330, 1, 1082331, 1, 1082332, 1, 1302173, 1, 1312072, 1, 1322107, 1, 1332148, 1, 1332149, 1, 1342040, 1, 1372100, 1, 1382124, 1, 1402111, 1, 1412071, 1, 1422073, 1, 1432099, 1, 1442136, 1, 1452129, 1, 1462118, 1, 1472141, 1, 1482102, 1, 1492101, 1, 1522020, 1, 1532037, 1, 1942004, 1, 1952004, 1, 1962004, 1, 1972004, 1, 2030008, 5, 1442018, 3, 2040900, 4, 2049100, 10, 2000005, 10, 2000004, 10, 2430144, 10, 2290285, 10, 2028061, 10, 2028062, 10, 2530000, 5};

    public static final int[] silverrewards = {2049401, 2, 2049301, 2, 3010041, 1, 1002452, 6, 1002455, 6, 2290084, 1, 2290048, 1, 2290040, 1, 2290046, 1, 2290074, 1, 2290064, 1, 2290094, 1, 2290022, 1, 2290056, 1, 2290066, 1, 2290020, 1, 1102082, 1, 1302049, 1, 1102041, 1, 1452019, 2, 4001116, 3, 4001012, 3, 1022060, 2, 2430144, 5, 2290285, 5, 2028062, 5, 2028061, 5, 2530000, 1, 2041100, 1, 2041101, 1, 2041102, 1, 2041103, 1, 2041104, 1, 2041105, 1, 2041106, 1, 2041107, 1, 2041108, 1, 2041109, 1, 2041110, 1, 2041111, 1, 2041112, 1, 2041113, 1, 2041114, 1, 2041115, 1, 2041116, 1, 2041117, 1, 2041118, 1, 2041119, 1, 2041300, 1, 2041301, 1, 2041302, 1, 2041303, 1, 2041304, 1, 2041305, 1, 2041306, 1, 2041307, 1, 2041308, 1, 2041309, 1, 2041310, 1, 2041311, 1, 2041312, 1, 2041313, 1, 2041314, 1, 2041315, 1, 2041316, 1, 2041317, 1, 2041318, 1, 2041319, 1, 2049200, 1, 2049201, 1, 2049202, 1, 2049203, 1, 2049204, 1, 2049205, 1, 2049206, 1, 2049207, 1, 2049208, 1, 2049209, 1, 2049210, 1, 2049211, 1, 1432011, 3, 1442020, 3, 1382035, 3, 1372010, 3, 1332027, 3, 1302056, 3, 1402005, 3, 1472053, 3, 1462018, 3, 1452017, 3, 1422013, 3, 1322029, 3, 1412010, 3, 1032080, 20, 1032081, 15, 1032082, 10, 1032083, 5, 1032084, 1, 1112435, 20, 1112436, 15, 1112437, 10, 1112438, 5, 1112439, 1, 1122081, 20, 1122082, 15, 1122083, 10, 1122084, 5, 1122085, 1, 1132036, 20, 1132037, 15, 1132038, 10, 1132039, 5, 1132040, 1, 1092070, 40, 1092071, 30, 1092072, 20, 1092073, 10, 1092074, 1, 1092075, 40, 1092076, 30, 1092077, 20, 1092078, 10, 1092079, 1, 1092080, 40, 1092081, 30, 1092082, 20, 1092083, 10, 1092084, 1, 1092087, 1, 1092088, 1, 1302143, 40, 1302144, 30, 1302145, 20, 1302146, 10, 1302147, 1, 1312058, 40, 1312059, 30, 1312060, 20, 1312061, 10, 1312062, 1, 1322086, 40, 1322087, 30, 1322088, 20, 1322089, 10, 1322090, 1, 1332116, 40, 1332117, 30, 1332118, 20, 1332119, 10, 1332120, 1, 1332121, 40, 1332122, 30, 1332123, 20, 1332124, 10, 1332125, 1, 1342029, 40, 1342030, 30, 1342031, 20, 1342032, 10, 1342033, 1, 1372074, 40, 1372075, 30, 1372076, 20, 1372077, 10, 1372078, 1, 1382095, 40, 1382096, 30, 1382097, 20, 1382098, 10, 1392099, 1, 1402086, 40, 1402087, 30, 1402088, 20, 1402089, 10, 1402090, 1, 1412058, 40, 1412059, 30, 1412060, 20, 1412061, 10, 1412062, 1, 1422059, 40, 1422060, 30, 1422061, 20, 1422062, 10, 1422063, 1, 1432077, 40, 1432078, 30, 1432079, 20, 1432080, 10, 1432081, 1, 1442107, 40, 1442108, 30, 1442109, 20, 1442110, 10, 1442111, 1, 1452102, 40, 1452103, 30, 1452104, 20, 1452105, 10, 1452106, 1, 1462087, 40, 1462088, 30, 1462089, 20, 1462090, 10, 1462091, 1, 1472113, 40, 1472114, 30, 1472115, 20, 1472116, 10, 1472117, 1, 1482075, 40, 1482076, 30, 1482077, 20, 1482078, 10, 1482079, 1, 1492075, 40, 1492076, 30, 1492077, 20, 1492078, 10, 1492079, 1, 1132012, 2, 1132013, 1, 1002790, 1, 1002791, 1, 1002792, 1, 1002793, 1, 1002794, 1, 1082239, 1, 1082240, 1, 1082241, 1, 1082242, 1, 1082243, 1, 1052160, 1, 1052161, 1, 1052162, 1, 1052163, 1, 1052164, 1, 1072361, 1, 1072362, 1, 1072363, 1, 1072364, 1, 1072365, 1, 1302086, 1, 1312038, 1, 1322061, 1, 1332075, 1, 1332076, 1, 1372045, 1, 1382059, 1, 1402047, 1, 1412034, 1, 1422038, 1, 1432049, 1, 1442067, 1, 1452059, 1, 1462051, 1, 1472071, 1, 1482024, 1, 1492025, 1, 1342012, 1, 1942002, 1, 1952002, 1, 1962002, 1, 1972002, 1, 1522016, 1, 1532016, 1, 1002587, 3, 1402044, 1, 2101013, 4, 1442046, 1, 1422031, 1, 1332054, 3, 1012056, 3, 1022047, 3, 3012002, 1, 1442012, 3, 1442018, 3, 1432010, 3, 2000005, 10, 2049100, 10, 2000004, 10};

    public static final int[] peanuts = {1152000, 30, 1152001, 10, 1152060, 10, 1152061, 10, 3010019, 10, 2040211, 30, 2040212, 10, 1022097, 20, 2049000, 30, 2049001, 30, 2049002, 30, 1332100, 100, 1382058, 100, 1402073, 100, 1432066, 100, 1442090, 100, 1452058, 100, 1462076, 100, 1472069, 100, 1482051, 100, 1492024, 100, 2028062, 50, 2028061, 50, 2530000, 20, 1032083, 50, 1032084, 20, 1112439, 20, 1122084, 50, 1122085, 20, 1132039, 50, 1132040, 20, 1092073, 50, 1092074, 20, 1092078, 40, 1092079, 20, 1092083, 40, 1092084, 20, 1092087, 50, 1092088, 50, 1302146, 40, 1302147, 20, 1312059, 30, 1312060, 20, 1312061, 10, 1312062, 1, 1322087, 30, 1322088, 20, 1322089, 10, 1322090, 1, 1332117, 30, 1332118, 20, 1332119, 10, 1332120, 1, 1332122, 30, 1332123, 20, 1332124, 10, 1332125, 1, 1342030, 30, 1342031, 20, 1342032, 10, 1342033, 1, 1372075, 30, 1372076, 20, 1372077, 10, 1372078, 1, 1382096, 30, 1382097, 20, 1382098, 10, 1392099, 1, 1402087, 30, 1402088, 20, 1402089, 10, 1402090, 1, 1412059, 30, 1412060, 20, 1412061, 10, 1412062, 1, 1422060, 30, 1422061, 20, 1422062, 10, 1422063, 1, 1432078, 30, 1432079, 20, 1432080, 10, 1432081, 1, 1442108, 30, 1442109, 20, 1442110, 10, 1442111, 1, 1452103, 30, 1452104, 20, 1452105, 10, 1452106, 1, 1462088, 30, 1462089, 20, 1462090, 10, 1462091, 1, 1472114, 30, 1472115, 20, 1472116, 10, 1472117, 1, 1482076, 30, 1482077, 20, 1482078, 10, 1482079, 1, 1492076, 30, 1492077, 20, 1492078, 10, 1492079, 1, 1972002, 2, 1612004, 2, 1622004, 2, 1632004, 2, 1642004, 2, 1652004, 2, 2047000, 1, 2047001, 1, 2047002, 1, 2047100, 1, 2047101, 1, 2047102, 1, 2047200, 1, 2047201, 1, 2047202, 1, 2047203, 1, 2047204, 1, 2047205, 1, 2047206, 1, 2047207, 1, 2047208, 1, 2047300, 1, 2047301, 1, 2047302, 1, 2047303, 1, 2047304, 1, 2047305, 1, 2047306, 1, 2047307, 1, 2047308, 1, 2047309, 1, 2046004, 1, 2046005, 1, 2046104, 1, 2046105, 1, 2046208, 1, 2046209, 1, 2046210, 1, 2046211, 1, 2046212, 1, 2049200, 1, 2049201, 1, 2049202, 1, 2049203, 1, 2049204, 1, 2049205, 1, 2049206, 1, 2049207, 1, 2049208, 1, 2049209, 1, 2049210, 1, 2049211, 1, 1382049, 100, 1382050, 150, 1382051, 100, 1382052, 150, 2040006, 20, 2040007, 20, 2040403, 20, 2040506, 2, 2040507, 2, 2040603, 20, 2040507, 20, 2040603, 20, 2040709, 2, 2040710, 2, 2040711, 2, 2040806, 2, 2040903, 20, 2040507, 20, 2040603, 20, 2041024, 20, 2041025, 20, 2043003, 2, 2044019, 2, 2044019, 2, 2043103, 2, 2043203, 2, 2043303, 2, 2043703, 2, 2043803, 2, 2044003, 2, 2044019, 2, 2044103, 2, 2040903, 20, 2040903, 20, 2044203, 2, 2044303, 2, 2044403, 2, 2044503, 2, 2044603, 2, 2044703, 2, 2044815, 2, 2044908, 2, 2340000, 2, 2049406, 10, 2049303, 10, 3010070, 1, 3010073, 1, 3010073, 1, 1402014, 1, 1003172, 2, 1102275, 2, 1082295, 2, 1052314, 2, 1072485, 2, 1003173, 2, 1102276, 2, 1082296, 2, 1052315, 2, 1072486, 2, 1003174, 2, 1102277, 2, 1082297, 2, 1052316, 2, 1072487, 2, 1003175, 2, 1102278, 2, 1082298, 2, 1052317, 2, 1072488, 2, 1003176, 2, 1102279, 2, 1082299, 2, 1052318, 2, 1072489, 2, 1432086, 2, 1442116, 2, 1322096, 2, 1422066, 2, 1402095, 2, 1412065, 2, 1302152, 2, 1312065, 2, 1372084, 2, 1382104, 2, 1452111, 2, 1462099, 2, 1332130, 2, 1472122, 2, 1342036, 2, 1492085, 2, 1532018, 2, 1302016, 2, 3010000, 10, 3010001, 10, 3010002, 10, 3010003, 10, 3010004, 10, 3010005, 10, 3010006, 10, 3010209, 10, 3010210, 10, 3010007, 10, 3010008, 10, 3010009, 10, 3010010, 10, 3010012, 10, 3010013, 10, 3010014, 10, 3010016, 10, 3010294, 10, 3010017, 10, 3010295, 10, 3010018, 10, 3010019, 10, 3010021, 10, 3010024, 10, 3010025, 10, 3010028, 10, 3010029, 10, 3010030, 10, 3010031, 10, 3010032, 10, 3010033, 10, 3010034, 10, 3010035, 10, 3010036, 10, 3010037, 10, 3010038, 10, 3010039, 10, 3010040, 10, 3010041, 10, 3010043, 10, 3010044, 10, 3010045, 10, 3010046, 10, 3010047, 10, 3010048, 10, 3010049, 10, 3010199, 10, 3010050, 10, 3010051, 10, 3010052, 10};

    public static int[] eventCommonReward = {0, 10, 1, 10, 4, 5, 4170024, 25, 4280000, 5, 4280001, 6, 5490000, 5, 5490001, 6};

    public static int[] eventUncommonReward = {1, 4, 2, 8, 3, 8, 5062000, 20, 2430082, 20, 2430092, 20, 2022459, 2, 2022460, 1, 2022462, 1, 2430117, 2, 2430118, 2, 2430201, 4, 2430228, 4, 2430283, 4, 2430136, 4, 2430476, 4, 2430511, 4, 2430206, 4, 2430199, 1, 1032062, 5, 5220000, 28, 2022459, 5, 2022460, 5, 2022461, 5, 2022462, 5, 2022463, 5, 5050000, 2, 4080100, 10, 4080000, 10, 2049100, 10, 2430144, 10, 2290285, 10, 2028062, 10, 2028061, 10, 2530000, 5, 2531000, 5, 2041100, 1, 2041101, 1, 2041102, 1, 2041103, 1, 2041104, 1, 2041105, 1, 2041106, 1, 2041107, 1, 2041108, 1, 2041109, 1, 2041110, 1, 2041111, 1, 2041112, 1, 2041113, 1, 2041114, 1, 2041115, 1, 2041116, 1, 2041117, 1, 2041118, 1, 2041119, 1, 2041300, 1, 2041301, 1, 2041302, 1, 2041303, 1, 2041304, 1, 2041305, 1, 2041306, 1, 2041307, 1, 2041308, 1, 2041309, 1, 2041310, 1, 2041311, 1, 2041312, 1, 2041313, 1, 2041314, 1, 2041315, 1, 2041316, 1, 2041317, 1, 2041318, 1, 2041319, 1, 2049200, 1, 2049201, 1, 2049202, 1, 2049203, 1, 2049204, 1, 2049205, 1, 2049206, 1, 2049207, 1, 2049208, 1, 2049209, 1, 2049210, 1, 2049211, 1};

    public static int[] eventRareReward = {2049100, 5, 2430144, 5, 2290285, 5, 2028062, 5, 2028061, 5, 2530000, 2, 2531000, 2, 2049116, 1, 2049401, 10, 2049301, 20, 2049400, 3, 2340000, 1, 3010130, 5, 3010131, 5, 3010132, 5, 3010133, 5, 3010136, 5, 3010116, 5, 3010117, 5, 3010118, 5, 1112405, 1, 1112445, 1, 1022097, 1, 2040211, 1, 2040212, 1, 2049000, 2, 2049001, 2, 2049002, 2, 2049003, 2, 1012058, 2, 1012059, 2, 1012060, 2, 1012061, 2, 2022460, 4, 2022461, 3, 2022462, 4, 2022463, 3, 2040041, 1, 2040042, 1, 2040334, 1, 2040430, 1, 2040538, 1, 2040539, 1, 2040630, 1, 2040740, 1, 2040741, 1, 2040742, 1, 2040829, 1, 2040830, 1, 2040936, 1, 2041066, 1, 2041067, 1, 2043023, 1, 2043117, 1, 2043217, 1, 2043312, 1, 2043712, 1, 2043812, 1, 2044025, 1, 2044117, 1, 2044217, 1, 2044317, 1, 2044417, 1, 2044512, 1, 2044612, 1, 2044712, 1, 2046000, 1, 2046001, 1, 2046004, 1, 2046005, 1, 2046100, 1, 2046101, 1, 2046104, 1, 2046105, 1, 2046200, 1, 2046201, 1, 2046202, 1, 2046203, 1, 2046208, 1, 2046209, 1, 2046210, 1, 2046211, 1, 2046212, 1, 2046300, 1, 2046301, 1, 2046302, 1, 2046303, 1, 2047000, 1, 2047001, 1, 2047002, 1, 2047100, 1, 2047101, 1, 2047102, 1, 2047200, 1, 2047201, 1, 2047202, 1, 2047203, 1, 2047204, 1, 2047205, 1, 2047206, 1, 2047207, 1, 2047208, 1, 2047300, 1, 2047301, 1, 2047302, 1, 2047303, 1, 2047304, 1, 2047305, 1, 2047306, 1, 2047307, 1, 2047308, 1, 2047309, 1, 1112427, 5, 1112428, 5, 1112429, 5, 1012240, 10, 1022117, 10, 1032095, 10, 1112659, 10, 2070007, 10, 2330007, 5, 2070016, 5, 2070018, 5, 1152038, 1, 1152039, 1, 1152040, 1, 1152041, 1, 1122090, 1, 1122094, 1, 1122098, 1, 1122102, 1, 1012213, 1, 1012219, 1, 1012225, 1, 1012231, 1, 1012237, 1, 2070023, 5, 2070024, 5, 2330008, 5, 2003516, 5, 2003517, 1, 1132052, 1, 1132062, 1, 1132072, 1, 1132082, 1, 1112585, 1, 1072502, 1, 1072503, 1, 1072504, 1, 1072505, 1, 1072506, 1, 1052333, 1, 1052334, 1, 1052335, 1, 1052336, 1, 1052337, 1, 1082305, 1, 1082306, 1, 1082307, 1, 1082308, 1, 1082309, 1, 1003197, 1, 1003198, 1, 1003199, 1, 1003200, 1, 1003201, 1, 1662000, 1, 1662001, 1, 1672000, 1, 1672001, 1, 1672002, 1, 1112583, 1, 1032092, 1, 1132084, 1, 2430290, 1, 2430292, 1, 2430294, 1, 2430296, 1, 2430298, 1, 2430300, 1, 2430302, 1, 2430304, 1, 2430306, 1, 2430308, 1, 2430310, 1, 2430312, 1, 2430314, 1, 2430316, 1, 2430318, 1, 2430320, 1, 2430322, 1, 2430324, 1, 2430326, 1, 2430328, 1, 2430330, 1, 2430332, 1, 2430334, 1, 2430336, 1, 2430338, 1, 2430340, 1, 2430342, 1, 2430344, 1, 2430347, 1, 2430349, 1, 2430351, 1, 2430353, 1, 2430355, 1, 2430357, 1, 2430359, 1, 2430361, 1, 2430392, 1, 2430512, 1, 2430536, 1, 2430477, 1, 2430146, 1, 2430148, 1, 2430137, 1};

    public static int[] eventSuperReward = {2022121, 10, 4031307, 50, 3010127, 10, 3010128, 10, 3010137, 10, 3010157, 10, 2049300, 10, 2040758, 10, 1442057, 10, 2049402, 10, 2049304, 1, 2049305, 1, 2040759, 7, 2040760, 5, 2040125, 10, 2040126, 10, 1012191, 5, 1112514, 1, 1112531, 1, 1112629, 1, 1112646, 1, 1112515, 1, 1112532, 1, 1112630, 1, 1112647, 1, 1112516, 1, 1112533, 1, 1112631, 1, 1112648, 1, 2040045, 10, 2040046, 10, 2040333, 10, 2040429, 10, 2040542, 10, 2040543, 10, 2040629, 10, 2040755, 10, 2040756, 10, 2040757, 10, 2040833, 10, 2040834, 10, 2041068, 10, 2041069, 10, 2043022, 12, 2043120, 12, 2043220, 12, 2043313, 12, 2043713, 12, 2043813, 12, 2044028, 12, 2044120, 12, 2044220, 12, 2044320, 12, 2044520, 12, 2044513, 12, 2044613, 12, 2044713, 12, 2044817, 12, 2044910, 12, 2046002, 5, 2046003, 5, 2046102, 5, 2046103, 5, 2046204, 10, 2046205, 10, 2046206, 10, 2046207, 10, 2046304, 10, 2046305, 10, 2046306, 10, 2046307, 10, 2040006, 2, 2040007, 2, 2040303, 2, 2040403, 2, 2040506, 2, 2040507, 2, 2040603, 2, 2040709, 2, 2040710, 2, 2040711, 2, 2040806, 2, 2040903, 2, 2040913, 2, 2041024, 2, 2041025, 2, 2044815, 2, 2044908, 2, 1152046, 1, 1152047, 1, 1152048, 1, 1152049, 1, 1122091, 1, 1122095, 1, 1122099, 1, 1122103, 1, 1012214, 1, 1012220, 1, 1012226, 1, 1012232, 1, 1012238, 1, 1032088, 1, 1032089, 1, 1032090, 1, 1032091, 1, 1132053, 1, 1132063, 1, 1132073, 1, 1132083, 1, 1112586, 1, 1112593, 1, 1112597, 1, 1662002, 1, 1662003, 1, 1672003, 1, 1672004, 1, 1672005, 1, 1092088, 1, 1092089, 1, 1092087, 1, 1102275, 1, 1102276, 1, 1102277, 1, 1102278, 1, 1102279, 1, 1102280, 1, 1102281, 1, 1102282, 1, 1102283, 1, 1102284, 1, 1082295, 1, 1082296, 1, 1082297, 1, 1082298, 1, 1082299, 1, 1082300, 1, 1082301, 1, 1082302, 1, 1082303, 1, 1082304, 1, 1072485, 1, 1072486, 1, 1072487, 1, 1072488, 1, 1072489, 1, 1072490, 1, 1072491, 1, 1072492, 1, 1072493, 1, 1072494, 1, 1052314, 1, 1052315, 1, 1052316, 1, 1052317, 1, 1052318, 1, 1052319, 1, 1052329, 1, 1052321, 1, 1052322, 1, 1052323, 1, 1003172, 1, 1003173, 1, 1003174, 1, 1003175, 1, 1003176, 1, 1003177, 1, 1003178, 1, 1003179, 1, 1003180, 1, 1003181, 1, 1302152, 1, 1302153, 1, 1312065, 1, 1312066, 1, 1322096, 1, 1322097, 1, 1332130, 1, 1332131, 1, 1342035, 1, 1342036, 1, 1372084, 1, 1372085, 1, 1382104, 1, 1382105, 1, 1402095, 1, 1402096, 1, 1412065, 1, 1412066, 1, 1422066, 1, 1422067, 1, 1432086, 1, 1432087, 1, 1442116, 1, 1442117, 1, 1452111, 1, 1452112, 1, 1462099, 1, 1462100, 1, 1472122, 1, 1472123, 1, 1482084, 1, 1482085, 1, 1492085, 1, 1492086, 1, 1532017, 1, 1532018, 1, 2430291, 1, 2430293, 1, 2430295, 1, 2430297, 1, 2430299, 1, 2430301, 1, 2430303, 1, 2430305, 1, 2430307, 1, 2430309, 1, 2430311, 1, 2430313, 1, 2430315, 1, 2430317, 1, 2430319, 1, 2430321, 1, 2430323, 1, 2430325, 1, 2430327, 1, 2430329, 1, 2430331, 1, 2430333, 1, 2430335, 1, 2430337, 1, 2430339, 1, 2430341, 1, 2430343, 1, 2430345, 1, 2430348, 1, 2430350, 1, 2430352, 1, 2430354, 1, 2430356, 1, 2430358, 1, 2430360, 1, 2430362, 1, 1012239, 1, 1122104, 1, 1112584, 1, 1032093, 1, 1132085, 1};

    public static int[] tenPercent = {2040002, 2040005, 2040026, 2040031, 2040100, 2040105, 2040200, 2040205, 2040302, 2040310, 2040318, 2040323, 2040328, 2040329, 2040330, 2040331, 2040402, 2040412, 2040419, 2040422, 2040427, 2040502, 2040505, 2040514, 2040517, 2040534, 2040602, 2040612, 2040619, 2040622, 2040627, 2040702, 2040705, 2040708, 2040727, 2040802, 2040805, 2040816, 2040825, 2040902, 2040915, 2040920, 2040925, 2040928, 2040933, 2041002, 2041005, 2041008, 2041011, 2041014, 2041017, 2041020, 2041023, 2041058, 2041102, 2041105, 2041108, 2041111, 2041302, 2041305, 2041308, 2041311, 2043002, 2043008, 2043019, 2043102, 2043114, 2043202, 2043214, 2043302, 2043402, 2043702, 2043802, 2044002, 2044014, 2044015, 2044102, 2044114, 2044202, 2044214, 2044302, 2044314, 2044402, 2044414, 2044502, 2044602, 2044702, 2044802, 2044809, 2044902, 2045302, 2048002, 2048005};

    public static int[] fishingReward = {0, 100, 1, 100, 1302021, 5, 1072238, 1, 1072239, 1, 2049100, 2, 2430144, 1, 2290285, 1, 2028062, 1, 2028061, 1, 2049301, 1, 2049401, 1, 1302000, 3, 1442011, 1, 4000517, 8, 4031627, 2, 4031628, 1, 4031630, 1, 4031631, 1, 4031632, 1, 4031633, 2, 4031634, 1, 4031635, 1, 4031636, 1, 4031637, 2, 4031638, 2, 4031639, 1, 4031640, 1, 4031641, 2, 4031642, 2, 4031643, 1, 4031644, 1, 4031645, 2, 4031646, 2, 4031647, 1, 4031648, 1, 4001187, 20, 4001188, 20, 4001189, 20, 4031629, 1};

    public static int[] blockedMaps = {180000001, 180000002, 109050000, 280030000, 280030100, 240060200, 280090000, 280030001, 240060201, 950101100, 950101010};

    public static final int[] normalDrops = {4001009, 4001010, 4001011, 4001012, 4001013, 4001014, 4001021, 4001038, 4001039, 4001040, 4001041, 4001042, 4001043, 4001038, 4001039, 4001040, 4001041, 4001042, 4001043, 4001038, 4001039, 4001040, 4001041, 4001042, 4001043, 4000164, 2000000, 2000003, 2000004, 2000005, 4000019, 4000000, 4000016, 4000006, 2100121, 4000029, 4000064, 5110000, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007, 4000164, 2000000, 2000003, 2000004, 2000005, 4000019, 4000000, 4000016, 4000006, 2100121, 4000029, 4000064, 5110000, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007};

    public static final int[] rareDrops = {2049100, 2430144, 2028062, 2028061, 2290285, 2049301, 2049401, 2022326, 2049000, 2049001, 2049002};

    public static final int[] superDrops = {2040804, 2049400, 2028062, 2028061, 2430144, 2290285, 2049100};

    public static int[] owlItems = {1332052, 2043301, 2040804, 2049100, 1402016, 1382060, 1082002, 2070006, 2290272, 2049301};

    public static final int[] publicNpcIds = {9270035, 9070004, 9010022, 9071003, 9000087, 9000088, 9010000, 9000085, 9000018, 9000000};
    public static final String[] publicNpcs = {"#cUniversal NPC#", "Move to the #cBattle Square# to fight other players", "Move to a variety of #cparty quests#.", "Move to #cMonster Park# to team up to defeat monsters.", "Move to #cFree Market# to trade items with players.", "Move to #cArdentmill#, the crafting town.", "Check #cdrops# of any monster in the map.", "Review #cPokedex#.", "Review #cPokemon#.", "Join an #cevent# in progress."};
    public static final int OMOK_SCORE = 122200;
    public static final int MATCH_SCORE = 122210;
    public static final int HP_ITEM = 122221;
    public static final int MP_ITEM = 122223;
    public static final int BUFF_SKILL = 122224;
    public static final int JAIL_TIME = 123455;
    public static final int JAIL_QUEST = 123456;
    public static final int REPORT_QUEST = 123457;
    public static final int ULT_EXPLORER = 111111;
    public static final int POKEMON_WINS = 122400;
    public static final int ENERGY_DRINK = 122500;
    public static final int HARVEST_TIME = 122501;
    public static final int PENDANT_SLOT = 122700;
    public static final int CURRENT_SET = 122800;
    public static final int BOSS_PQ = 150001;
    public static final int JAGUAR = 111112;
    public static final int DOJO = 150100;
    public static final int DOJO_RECORD = 150101;
    public static final int PARTY_REQUEST = 122900;
    public static final int PARTY_INVITE = 122901;
    public static final int ALLOW_PET_LOOT = 122902;
    public static final int QUICK_SLOT = 123000;
    public static final int 称号 = 124000;
    public static final int 申请公ID = 26011;
    public static final int 申请公会名 = 26015;

    public static final int MAX_HP = 30000;
    public static final int MAX_MP = 30000;

    public static final int DROP_ITEM_PER = 99999; // 掉落比随机数控制

	private static final long[] exp = new long[201];
	
	public static void LoadExp() {
		for (int i = 1; i<=50;i++) {
			if (i <= 5) {
				exp[i] = i*(i*i/2+15);
			} else if (i > 5 && i <= 50) {
				exp[i] = i*i/3*(i*i/3+19);
			}
		}
        for (int i = 51; i<=200;i++) {
            exp[i] = (long)((exp[i-1])*1.0548);
        }
    }
	 
    public static long getExpNeededForLevel(final int level) {
        if (level < 1 || level >= exp.length) {
            return Long.MAX_VALUE;
        }
        return exp[level];
    }

    public static int getGuildExpNeededForLevel(int level) {
        if ((level < 0) || (level >= guildExp.length)) {
            return 2147483647;
        }
        return guildExp[level];
    }
    public static int getClosenessNeededForLevel(int level) {
        return closeness[(level - 1)];
    }

    public static int getMountExpNeededForLevel(int level) {
        return mountExp[(level - 1)];
    }

    public static int getTraitExpNeededForLevel(int level) {
        if ((level < 0) || (level >= cumulativeTraitExp.length)) {
            return 2147483647;
        }
        return cumulativeTraitExp[level];
    }

    public static int getSetExpNeededForLevel(int level) {
        if ((level < 0) || (level >= setScore.length)) {
            return 2147483647;
        }
        return setScore[level];
    }

    public static int getMonsterHP(int level) {
        if ((level < 0) || (level >= mobHpVal.length)) {
            return 2147483647;
        }
        return mobHpVal[level];
    }

    public static int getBookLevel(int level) {
        return 5 * level * (level + 1);
    }

    public static int getTimelessRequiredEXP(int level) {
        return 70 + level * 10;
    }

    public static int getReverseRequiredEXP(int level) {
        return 60 + level * 5;
    }

    public static int getProfessionEXP(int level) {
        if ((level < 0) || (level >= professionExp.length)) {
            return 2147483647;
        }
        return professionExp[level];
    }

    public static Double maxViewRangeSq() {
        return /*1366 * 768 * 2*/ Double.POSITIVE_INFINITY;
    }

    public static Double maxViewRangeSq_Half() {
        return /*1366 * 768*/ Double.POSITIVE_INFINITY;
    }

    public static boolean isThrowingStar(final int itemId) {
        return itemId / 10000 == 207;
    }

    public static boolean isBullet(final int itemId) {
        return itemId / 10000 == 233;
    }

    public static boolean isJobFamily(int baseJob, int currentJob) {
        return (currentJob >= baseJob) && (currentJob / 100 == baseJob / 100);
    }

    public static boolean is冒险家(int job) {
        return (job >= 0) && (job < 1000);
    }
    public static boolean is管理员(int job) {
        return (job == 900) || (job == 910) || (job == 800);
    }

    public static boolean isRecoveryIncSkill(int skillId) {
        switch (skillId) {
            case 1110000:
            case 5700005:
                return true;
        }
        return false;
    }
    public static int getBOF_ForJob(int job) {
        return PlayerStats.getSkillByJob(12, job);
    }

    public static int getEmpress_ForJob(int job) {
        return PlayerStats.getSkillByJob(73, job);
    }

    public static boolean isElementAmp_Skill(int skillId) {
        switch (skillId) {
            case 2110001:
            case 2210001:
                return true;
        }
        return false;
    }

    public static int getMPEaterForJob(int job) {
        switch (job) {
            case 210:
            case 211:
            case 212:
                return 2100000;
            case 220:
            case 221:
            case 222:
                return 2200000;
            case 230:
            case 231:
            case 232:
                return 2300000;
            case 213:
            case 214:
            case 215:
            case 216:
            case 217:
            case 218:
            case 219:
            case 223:
            case 224:
            case 225:
            case 226:
            case 227:
            case 228:
            case 229:
        }
        return 2100000;
    }

    public static int getJobShortValue(int job) {
        if (job >= 1000) {
            job -= job / 1000 * 1000;
        }
        job /= 100;
        if (job == 4) {
            job *= 2;
        } else if (job == 3) {
            job++;
        } else if (job == 5) {
            job += 11;
        }
        return job;
    }

    public static boolean isPyramidSkill(int skill) {
        return (is新手职业(skill / 10000)) && (skill % 10000 == 1020);
    }

    public static boolean isInflationSkill(int skill) {
        return (is新手职业(skill / 10000)) && (skill % 10000 == 1092);
    }

    public static boolean isMulungSkill(int skill) {
        return (is新手职业(skill / 10000)) && ((skill % 10000 == 1009) || (skill % 10000 == 1010) || (skill % 10000 == 1011));
    }

    public static boolean isIceKnightSkill(int skill) {
        return (is新手职业(skill / 10000)) && ((skill % 10000 == 1098) || (skill % 10000 == 99) || (skill % 10000 == 100) || (skill % 10000 == 103) || (skill % 10000 == 104) || (skill % 10000 == 1105));
    }

    public static boolean is骑兽技能(int skill) {
        return (is新手职业(skill / 10000)) && (skill % 10000 == 1004);
    }

    public static int getTaxAmount(long meso) {
        if (meso >= 100000000) {
            return (int) Math.round(0.06D * meso);
        }
        if (meso >= 25000000) {
            return (int) Math.round(0.05D * meso);
        }
        if (meso >= 10000000) {
            return (int) Math.round(0.04D * meso);
        }
        if (meso >= 5000000) {
            return (int) Math.round(0.03D * meso);
        }
        if (meso >= 1000000) {
            return (int) Math.round(0.018D * meso);
        }
        if (meso >= 100000) {
            return (int) Math.round(0.008D * meso);
        }
        return 0;
    }

    public static int EntrustedStoreTax(long meso) {
        if (meso >= 100000000) {
            return (int) Math.round(0.03D * meso);
        }
        if (meso >= 25000000) {
            return (int) Math.round(0.025D * meso);
        }
        if (meso >= 10000000) {
            return (int) Math.round(0.02D * meso);
        }
        if (meso >= 5000000) {
            return (int) Math.round(0.015D * meso);
        }
        if (meso >= 1000000) {
            return (int) Math.round(0.008999999999999999D * meso);
        }
        if (meso >= 100000) {
            return (int) Math.round(0.004D * meso);
        }
        return 0;
    }

    public static int getAttackDelay(int skillId, Skill skill) {
        switch (skillId) {
            case 2111003:
                return 0;
            case 1311011:
            case 3111009:
            case 3120019:
            case 3121013:
            case 5220023:
            case 5221022:
                return 40;
            case 4111010:
                return 99;
            case 13111020:
            case 13121001:
                return 120;
            case 4100012:
            case 4120019:
                return 30;
            case 2221012:
                return 180;
            case 0:
                return 330;
        }
        if ((skill != null) && (skill.getSkillType() == 3)) {
            return 0;
        }
        if ((skill != null) && (skill.getDelay() > 0) && (!isNoDelaySkill(skillId))) {
            return skill.getDelay();
        }
        return 330;
    }

    public static byte gachaponRareItem(int id) {
        switch (id) {
            case 1002776:
            case 1002777:
            case 1002778:
            case 1002779:
            case 1002780:
            case 1002790:
            case 1002791:
            case 1002792:
            case 1002793:
            case 1002794:
            case 1003280:
            case 1003281:
            case 1003282:
            case 1003283:
            case 1003284:
            case 1032031:
            case 1032084:
            case 1052155:
            case 1052156:
            case 1052157:
            case 1052158:
            case 1052159:
            case 1052160:
            case 1052161:
            case 1052162:
            case 1052163:
            case 1052164:
            case 1052374:
            case 1052375:
            case 1052376:
            case 1052377:
            case 1052378:
            case 1072355:
            case 1072356:
            case 1072357:
            case 1072358:
            case 1072359:
            case 1072361:
            case 1072362:
            case 1072363:
            case 1072364:
            case 1072365:
            case 1072544:
            case 1072545:
            case 1072546:
            case 1072547:
            case 1072548:
            case 1082234:
            case 1082235:
            case 1082236:
            case 1082237:
            case 1082238:
            case 1082239:
            case 1082240:
            case 1082241:
            case 1082242:
            case 1082243:
            case 1082328:
            case 1082329:
            case 1082330:
            case 1082331:
            case 1082332:
            case 1092057:
            case 1092058:
            case 1092059:
            case 1092074:
            case 1092079:
            case 1092084:
            case 1092087:
            case 1092088:
            case 1102172:
            case 1112439:
            case 1122011:
            case 1122012:
            case 1122085:
            case 1132012:
            case 1132013:
            case 1132040:
            case 1302081:
            case 1302086:
            case 1302147:
            case 1302173:
            case 1312037:
            case 1312038:
            case 1312062:
            case 1312072:
            case 1322060:
            case 1322061:
            case 1322090:
            case 1322107:
            case 1332073:
            case 1332074:
            case 1332075:
            case 1332076:
            case 1332120:
            case 1332125:
            case 1332148:
            case 1332149:
            case 1342011:
            case 1342012:
            case 1342033:
            case 1342040:
            case 1372044:
            case 1372045:
            case 1372078:
            case 1372100:
            case 1382057:
            case 1382059:
            case 1382099:
            case 1382124:
            case 1402037:
            case 1402046:
            case 1402047:
            case 1402090:
            case 1402111:
            case 1412033:
            case 1412034:
            case 1412062:
            case 1412071:
            case 1422037:
            case 1422038:
            case 1422063:
            case 1422073:
            case 1432047:
            case 1432049:
            case 1432081:
            case 1432099:
            case 1442063:
            case 1442067:
            case 1442111:
            case 1442136:
            case 1452057:
            case 1452059:
            case 1452106:
            case 1452129:
            case 1462050:
            case 1462051:
            case 1462091:
            case 1462118:
            case 1472068:
            case 1472071:
            case 1472117:
            case 1472141:
            case 1482023:
            case 1482024:
            case 1482079:
            case 1482102:
            case 1492023:
            case 1492025:
            case 1492079:
            case 1492101:
            case 1522015:
            case 1522016:
            case 1522020:
            case 1532015:
            case 1532016:
            case 1532037:
            case 1942002:
            case 1942004:
            case 1952002:
            case 1952004:
            case 1962002:
            case 1962004:
            case 1972002:
            case 1972004:
            case 2040006:
            case 2040007:
            case 2040303:
            case 2040403:
            case 2040506:
            case 2040507:
            case 2040603:
            case 2040709:
            case 2040710:
            case 2040711:
            case 2040806:
            case 2040903:
            case 2041024:
            case 2041025:
            case 2043003:
            case 2043103:
            case 2043203:
            case 2043303:
            case 2043703:
            case 2043803:
            case 2044003:
            case 2044019:
            case 2044103:
            case 2044203:
            case 2044303:
            case 2044403:
            case 2044503:
            case 2044603:
            case 2044703:
            case 2044815:
            case 2044908:
            case 2049000:
            case 2049001:
            case 2049002:
            case 2049100:
            case 2290096:
            case 2340000:
                return 2;
        }

        return 1;
    }

    public static boolean isReverseItem(int itemId) {
        switch (itemId) {
            case 1002790:
            case 1002791:
            case 1002792:
            case 1002793:
            case 1002794:
            case 1052160:
            case 1052161:
            case 1052162:
            case 1052163:
            case 1052164:
            case 1072361:
            case 1072362:
            case 1072363:
            case 1072364:
            case 1072365:
            case 1082239:
            case 1082240:
            case 1082241:
            case 1082242:
            case 1082243:
            case 1302086:
            case 1312038:
            case 1322061:
            case 1332075:
            case 1332076:
            case 1342012:
            case 1372045:
            case 1382059:
            case 1402047:
            case 1412034:
            case 1422038:
            case 1432049:
            case 1442067:
            case 1452059:
            case 1462051:
            case 1472071:
            case 1482024:
            case 1492025:
            case 1522016:
            case 1532016:
            case 1942002:
            case 1952002:
            case 1962002:
            case 1972002:
                return true;
        }
        return false;
    }

    public static boolean isTimelessItem(int itemId) {
        switch (itemId) {
            case 1002776:
            case 1002777:
            case 1002778:
            case 1002779:
            case 1002780:
            case 1032031:
            case 1052155:
            case 1052156:
            case 1052157:
            case 1052158:
            case 1052159:
            case 1072355:
            case 1072356:
            case 1072357:
            case 1072358:
            case 1072359:
            case 1082234:
            case 1082235:
            case 1082236:
            case 1082237:
            case 1082238:
            case 1092057:
            case 1092058:
            case 1092059:
            case 1102172:
            case 1122011:
            case 1122012:
            case 1302081:
            case 1312037:
            case 1322060:
            case 1332073:
            case 1332074:
            case 1342011:
            case 1372044:
            case 1382057:
            case 1402046:
            case 1412033:
            case 1422037:
            case 1432047:
            case 1442063:
            case 1452057:
            case 1462050:
            case 1472068:
            case 1482023:
            case 1492023:
            case 1522015:
            case 1532015:
                return true;
        }
        return false;
    }

    public static int getExpForLevel(int i, int itemId) {
        if (isReverseItem(itemId)) {
            return getReverseRequiredEXP(i);
        }
        if (getMaxLevel(itemId) > 0) {
            return getTimelessRequiredEXP(i);
        }
        return 0;
    }

    public static int getMaxLevel(int itemId) {
        Map inc = MapleItemInformationProvider.getInstance().getEquipIncrements(itemId);
        return inc != null ? inc.size() : 0;
    }

    public static int getStatChance() {
        return 25;
    }

    public static MonsterStatus getStatFromWeapon(int itemid) {
        switch (itemid) {
            case 1302109:
            case 1312041:
            case 1322067:
            case 1332083:
            case 1372048:
            case 1382064:
            case 1402055:
            case 1412037:
            case 1422041:
            case 1432052:
            case 1442073:
            case 1452064:
            case 1462058:
            case 1472079:
            case 1482035:
                return MonsterStatus.恐慌;
            case 1302108:
            case 1312040:
            case 1322066:
            case 1332082:
            case 1372047:
            case 1382063:
            case 1402054:
            case 1412036:
            case 1422040:
            case 1432051:
            case 1442072:
            case 1452063:
            case 1462057:
            case 1472078:
            case 1482036:
                return MonsterStatus.速度;
        }
        return null;
    }

    public static int getXForStat(MonsterStatus stat) {
        switch (stat) {
            case 恐慌:
                return -70;
            case 速度:
                return -50;
        }
        return 0;
    }

    public static int getSkillForStat(MonsterStatus stat) {
        switch (stat) {
            case 恐慌:
                return 1111003;
            case 速度:
                return 3121007;
        }
        return 0;
    }

    public static int getSkillBookBySkill(int skillId) {
        return getSkillBookByJob(skillId / 10000, skillId);
    }

    public static int getSkillBookByJob(int job) {
        return getSkillBookByJob(job, 0);
    }

    public static int getSkillBookByJob(int job, int skillId) {
        if ((job >= 430) && (job <= 434)) {
            return job - 429;
        }

        switch (job) {
            case 110:
            case 120:
            case 130:
            case 210:
            case 220:
            case 230:
            case 310:
            case 320:
            case 410:
            case 420:
            case 510:
            case 520:
            case 530:
                return 1;
            case 111:
            case 121:
            case 131:
            case 211:
            case 221:
            case 231:
            case 311:
            case 321:
            case 411:
            case 421:
            case 511:
            case 521:
            case 531:
                return 2;
            case 112:
            case 122:
            case 132:
            case 212:
            case 222:
            case 232:
            case 312:
            case 322:
            case 412:
            case 422:
            case 512:
            case 522:
            case 532:
                return 3;
        }
        return 0;
    }
    public static int getJobNumber(int jobz) {
        int job = jobz % 1000;
        if ((job / 100 == 0) || (is新手职业(jobz))) {
            return 0;
        }
        if ((job / 10 % 10 == 0) || (job == 501)) {
            return 1;
        }
        return 2 + job % 10;
    }

    public static boolean is新手职业(int job) {
        switch (job) {
            case 0:
                return true;
        }
        return false;
    }

    /**
     * 是否为投掷攻击类职业
     * @param job
     * @return
     */
    public static boolean isCastJob(int job){
        switch (job) {
            case 300: // 弓箭手
            case 310:
            case 311:
            case 320:
            case 321:
            case 400:
            case 410:
            case 411:
            case 420:
            case 421:
                return true;
            default:
                return false;

        }
    }

    public static int getLinkedMountItem(int sourceid) {
        switch (sourceid % 1000) {
            case 1:
            case 24:
            case 25:
                return 1018;
            case 2:
            case 26:
                return 1019;
            case 3:
                return 1025;
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
                return sourceid % 1000 + 1023;
            case 9:
            case 10:
            case 11:
                return sourceid % 1000 + 1024;
            case 12:
                return 1042;
            case 13:
                return 1044;
            case 14:
                return 1049;
            case 15:
            case 16:
            case 17:
                return sourceid % 1000 + 1036;
            case 18:
            case 19:
                return sourceid % 1000 + 1045;
            case 20:
                return 1072;
            case 21:
                return 1084;
            case 22:
                return 1089;
            case 23:
                return 1106;
            case 29:
                return 1151;
            case 30:
            case 50:
                return 1054;
            case 31:
            case 51:
                return 1069;
            case 32:
                return 1138;
            case 45:
            case 46:
            case 47:
            case 48:
            case 49:
                return sourceid % 1000 + 1009;
            case 52:
                return 1070;
            case 53:
                return 1071;
            case 54:
                return 1096;
            case 55:
                return 1101;
            case 56:
                return 1102;
            case 58:
                return 1118;
            case 59:
                return 1121;
            case 60:
                return 1122;
            case 61:
                return 1129;
            case 62:
                return 1139;
            case 63:
            case 64:
            case 65:
            case 66:
            case 67:
            case 68:
            case 69:
            case 70:
            case 71:
            case 72:
            case 73:
            case 74:
            case 75:
            case 76:
            case 77:
            case 78:
                return sourceid % 1000 + 1080;
            case 82:
                return 1932093;
            case 83:
                return 1932094;
            case 84:
                return 1932095;
            case 85:
            case 86:
            case 87:
                return sourceid % 1000 + 928;
            case 88:
                return 1065;
            case 90:
                return 1932096;
            case 27:
                return 1932049;
            case 28:
                return 1932050;
            case 111:
                return 1932038;
            case 112:
                return 1932097;
            case 113:
                return 1932098;
            case 114:
                return 1932099;
            case 115:
                return 1932065;
            case 116:
                return 1932066;
            case 117:
                return 1932072;
            case 118:
                return 1932078;
            case 119:
                return 1932080;
            case 120:
                return 1992015;
            case 121:
                return 1932092;
            case 124:
                return 1932105;
            case 142:
                return 1932112;
            case 181:
                return 1932091;
            case 33:
                return 1932057;
            case 38:
                return 1932088;
            case 34:
            case 35:
            case 36:
            case 37:
            case 39:
            case 40:
            case 41:
            case 42:
            case 43:
            case 44:
            case 57:
            case 79:
            case 80:
            case 81:
            case 89:
            case 91:
            case 92:
            case 93:
            case 94:
            case 95:
            case 96:
            case 97:
            case 98:
            case 99:
            case 100:
            case 101:
            case 102:
            case 103:
            case 104:
            case 105:
            case 106:
            case 107:
            case 108:
            case 109:
            case 110:
            case 122:
            case 123:
            case 125:
            case 126:
            case 127:
            case 128:
            case 129:
            case 130:
            case 131:
            case 132:
            case 133:
            case 134:
            case 135:
            case 136:
            case 137:
            case 138:
            case 139:
            case 140:
            case 141:
            case 143:
            case 144:
            case 145:
            case 146:
            case 147:
            case 148:
            case 149:
            case 150:
            case 151:
            case 152:
            case 153:
            case 154:
            case 155:
            case 156:
            case 157:
            case 158:
            case 159:
            case 160:
            case 161:
            case 162:
            case 163:
            case 164:
            case 165:
            case 166:
            case 167:
            case 168:
            case 169:
            case 170:
            case 171:
            case 172:
            case 173:
            case 174:
            case 175:
            case 176:
            case 177:
            case 178:
            case 179:
            case 180:
        }
        return 0;
    }

    public static int getMountItem(int sourceid, MapleCharacter chr) {
        switch (sourceid) {
            case 33001001:
                if (chr == null) {
                    return 1932015;
                }
                switch (chr.getIntNoRecord(111112)) {
                    case 20:
                        return 1932030;
                    case 30:
                        return 1932031;
                    case 40:
                        return 1932032;
                    case 50:
                        return 1932033;
                    case 60:
                        return 1932036;
                    case 70:
                        return 1932100;
                }
                return 1932015;
        }
        if (!is新手职业(sourceid / 10000)) {
            if ((sourceid / 10000 == 8000) && (sourceid != 80001000)) {
                Skill skil = SkillFactory.getSkill(sourceid);
                if ((skil != null) && (skil.getTamingMob() > 0)) {
                    return skil.getTamingMob();
                }
                if ((skil != null) && (skil.getvehicleID() > 0)) {
                    return skil.getvehicleID();
                }
                int link = getLinkedMountItem(sourceid);
                if (link > 0) {
                    if (link < 10000) {
                        return getMountItem(link, chr);
                    }
                    return link;
                }

            }

            return 0;
        }
        switch (sourceid % 10000) {
            case 1013:
            case 1046:
                return 1932001;
            case 1015:
            case 1048:
                return 1932002;
            case 1016:
            case 1017:
            case 1027:
                return 1932007;
            case 1018:
                return 1932003;
            case 1019:
                return 1932005;
            case 1025:
                return 1932006;
            case 1028:
                return 1932008;
            case 1029:
                return 1932009;
            case 1030:
                return 1932011;
            case 1031:
                return 1932010;
            case 1033:
                return 1932013;
            case 1034:
                return 1932014;
            case 1035:
                return 1932012;
            case 1036:
                return 1932017;
            case 1037:
                return 1932018;
            case 1038:
                return 1932019;
            case 1039:
                return 1932020;
            case 1040:
                return 1932021;
            case 1042:
                return 1932022;
            case 1044:
                return 1932023;
            case 1049:
                return 1932025;
            case 1050:
                return 1932004;
            case 1051:
                return 1932026;
            case 1052:
                return 1932027;
            case 1053:
                return 1932028;
            case 1054:
                return 1932029;
            case 1063:
                return 1932034;
            case 1064:
                return 1932035;
            case 1065:
                return 1932037;
            case 1069:
                return 1932038;
            case 1070:
                return 1932039;
            case 1071:
                return 1932040;
            case 1072:
                return 1932041;
            case 1084:
                return 1932043;
            case 1089:
                return 1932044;
            case 1096:
                return 1932045;
            case 1101:
                return 1932046;
            case 1102:
                return 1932047;
            case 1106:
                return 1932048;
            case 1115:
                return 1932052;
            case 1118:
                return 1932060;
            case 1121:
                return 1932063;
            case 1122:
                return 1932064;
            case 1123:
                return 1932065;
            case 1124:
                return 1932066;
            case 1129:
                return 1932071;
            case 1130:
                return 1932072;
            case 1136:
                return 1932078;
            case 1138:
                return 1932080;
            case 1139:
                return 1932081;
            case 1143:
            case 1144:
            case 1145:
            case 1146:
            case 1147:
            case 1148:
            case 1149:
            case 1150:
            case 1151:
            case 1152:
            case 1153:
            case 1154:
            case 1155:
            case 1156:
            case 1157:
                return 1992000 + sourceid % 10000 - 1143;
            case 1014:
            case 1020:
            case 1021:
            case 1022:
            case 1023:
            case 1024:
            case 1026:
            case 1032:
            case 1041:
            case 1043:
            case 1045:
            case 1047:
            case 1055:
            case 1056:
            case 1057:
            case 1058:
            case 1059:
            case 1060:
            case 1061:
            case 1062:
            case 1066:
            case 1067:
            case 1068:
            case 1073:
            case 1074:
            case 1075:
            case 1076:
            case 1077:
            case 1078:
            case 1079:
            case 1080:
            case 1081:
            case 1082:
            case 1083:
            case 1085:
            case 1086:
            case 1087:
            case 1088:
            case 1090:
            case 1091:
            case 1092:
            case 1093:
            case 1094:
            case 1095:
            case 1097:
            case 1098:
            case 1099:
            case 1100:
            case 1103:
            case 1104:
            case 1105:
            case 1107:
            case 1108:
            case 1109:
            case 1110:
            case 1111:
            case 1112:
            case 1113:
            case 1114:
            case 1116:
            case 1117:
            case 1119:
            case 1120:
            case 1125:
            case 1126:
            case 1127:
            case 1128:
            case 1131:
            case 1132:
            case 1133:
            case 1134:
            case 1135:
            case 1137:
            case 1140:
            case 1141:
            case 1142:
        }
        return 0;
    }

    public static boolean isAdminSkill(int skillId) {
        int jobId = skillId / 10000;
        return (jobId == 800) || (jobId == 900);
    }

    public static boolean isSpecialSkill(int skillId) {
        int jobId = skillId / 10000;
        return (jobId == 7000) || (jobId == 7100) || (jobId == 8000) || (jobId == 9000) || (jobId == 9100) || (jobId == 9200) || (jobId == 9201) || (jobId == 9202) || (jobId == 9203) || (jobId == 9204);
    }

    public static boolean isApplicableSkill_(int skillId) {
        return ((skillId >= 90000000) && (skillId < 92000000)) || ((skillId % 10000 >= 8000) && (skillId % 10000 <= 8003));
    }

    public static boolean SSpotentialID(int potentialID) {
        if (potentialID > 60000) {
            return true;
        }
        int[] s = {42656, 42650, 42556, 42551, 42501, 42661, 42801, 42602, 42601, 42292, 42291, 42116, 42106, 42087, 42086, 42071, 42070, 42066, 42065, 42064, 42063, 42061, 42059, 42057, 42056, 42055, 42053, 42051, 42048, 42047, 42046, 42045, 42044, 42043, 42042, 42041, 41007, 41006, 41005, 40703, 40656, 40650, 40603,
            40602, 40601, 40557, 40556, 40551, 40502, 40501, 40377, 40376, 40371, 40366, 4035, 40356, 40292, 40291, 40116, 40111, 40107, 40106, 40086, 40081, 40070, 40057, 40056, 40055, 40054, 40053, 40052, 40051, 40048, 40047, 40046, 40045, 40044, 40043, 40042, 40041};
        for (Integer i : s) {
            if (potentialID == i) {
                return true;
            }
        }
        return false;
    }

    public static boolean potentialIDFits(int potentialID, int newstate, int i) {
        if (newstate == 20) {
            return SSpotentialID(potentialID);
        }
        if (newstate == 19) {
            return potentialID >= 30000 && potentialID < 40000;
        }
        if (newstate == 18) {
            return (potentialID >= 20000) && (potentialID < 30000);
        }
        if (newstate == 17) {
            return (potentialID >= 10000) && (potentialID < 20000);
        }
        return false;
    }

    public static boolean optionTypeFits(int optionType, int itemId) {
        switch (optionType) {
            case 10://武器
                return ItemConstants.isWeapon(itemId);
            case 11://除了武器的全部装备
                return !ItemConstants.isWeapon(itemId);
            case 20://盾牌
                return ItemConstants.isShield(itemId) || ItemConstants.isSpecialShield(itemId);
            case 21://宠物装备?
                return ItemConstants.isPetEquip(itemId);
            case 40://配饰
                return ItemConstants.isAccessory(itemId);
            case 51://帽子
                return itemId / 10000 == 100;
            case 52://披风
                return itemId / 10000 == 110;
            case 53://上衣、裤子和套服
                return itemId / 10000 == 104 || ItemConstants.isOverall(itemId) || itemId / 10000 == 106;
            case 54://手套
                return itemId / 10000 == 108;
            case 55://鞋子
                return itemId / 10000 == 107;
            case 90:
                return false;
        }
        return true;
    }

    public static boolean isBlockedPotential(int potentialID) {
        return (potentialID > 50000) || (potentialID < 10001);
    }

    public static boolean optionTypeFitsX(int potentialID, int itemId) {
        /*switch (potentialID) {
         case 60001:
         case 60003:
         return ItemConstants.isWeapon(itemId) || itemId / 10000 == 109 || itemId / 10000 == 135;
         case 60002:
         return true;
         }*/
        if (potentialID > 60000) {
            return ItemConstants.isWeapon(itemId) || ItemConstants.isShield(itemId) || ItemConstants.isSpecialShield(itemId) || ItemConstants.is符号(itemId);
        } else {
            return true;
        }
    }

    public static boolean isMountItemAvailable(int mountid, int jobid) {
        if ((jobid != 900) && (mountid / 10000 == 190)) {
            switch (mountid) {
                case 1902000:
                case 1902001:
                case 1902002:
                    return is冒险家(jobid);
                case 1902003:
                case 1902004:
                case 1902008:
                case 1902009:
                case 1902010:
                case 1902011:
                case 1902012:
                case 1902013:
                case 1902014:
                case 1902019:
                case 1902020:
                case 1902021:
                case 1902022:
                case 1902023:
                case 1902024:
                case 1902025:
                case 1902026:
                case 1902027:
                case 1902028:
                case 1902029:
                case 1902030:
                case 1902031:
                case 1902032:
                case 1902033:
                case 1902034:
                case 1902035:
                case 1902036:
                case 1902037:
                case 1902038:
                case 1902039:
            }
        }

        return mountid / 10000 == 190;
    }

    public static int getMasterySkill(int job) {
        if (job >= 410 && job <= 412) {
            return 4100000;
        } else if (job >= 520 && job <= 522) {
            return 5200000;
        }
        return 0;
    }

    public static int getExpRate_Quest(int level) {
        return 1;
    }

    public static int getCustomReactItem(int rid, int original) {
        if (rid == 2008006) {
            return Calendar.getInstance().get(7) + 4001055;
        }

        return original;
    }

    public static boolean isForceRespawn(int mapid) {
        switch (mapid) {
            case 103000800:
            case 925100100:
                return true;
        }
        return (mapid / 100000 == 9800) && ((mapid % 10 == 1) || (mapid % 1000 == 100));
    }

    public static int getFishingTime(boolean vip, boolean gm) {
        return vip ? 30000 : gm ? 1000 : 60000;
    }

    public static int getCustomSpawnID(int summoner, int def) {
        switch (summoner) {
            case 9400589:
            case 9400748:
                return 9400706;
        }
        return def;
    }

    public static boolean canForfeit(int questid) {
        switch (questid) {
            case 20000:
            case 20010:
            case 20015:
            case 20020:
                return false;
        }
        return true;
    }

    public static double getAttackRange(MapleStatEffect def, int rangeInc) {
        double defRange = (400.0D + rangeInc) * (400.0D + rangeInc);
        if (def != null) {
            defRange += def.getMaxDistanceSq() + def.getRange() * def.getRange();
        }

        return defRange + 120000.0D;
    }

    public static double getAttackRange(Point lt, Point rb) {
        double defRange = 160000.0D;
        int maxX = Math.max(Math.abs(lt == null ? 0 : lt.x), Math.abs(rb == null ? 0 : rb.x));
        int maxY = Math.max(Math.abs(lt == null ? 0 : lt.y), Math.abs(rb == null ? 0 : rb.y));
        defRange += maxX * maxX + maxY * maxY;

        return defRange + 120000.0D;
    }

    public static boolean is不检测范围(int skillId) {
        switch (skillId) {
            case 1321052:
            case 65111007:
            case 36110004:
            case 2211010:
            case 2221006:
            case 2221012:
            case 3101005:
            case 4100012:
            case 4120019:
            case 5101012:
            case 5300007:
            case 5301001:
            case 27120211:
            case 27121100:
            case 27121201:
            case 31101002:
            case 61111100:
            case 61111113:
                return true;
        }
        return false;
    }

    public static boolean is不检测次数(int skillId) {
        switch (skillId) {
            case 1321052:
            case 65111007:
            case 36110004:
            case 4211006:
            case 3221007:
            case 23121003:
            case 24100003:
            case 24120002:
            case 4120019:
            case 4100012:
            case 1201012:
            case 1201011:
            case 1211008:
            case 1221009:
            case 1221004:
            case 27111100:
            case 3120017:
            case 4210014:
                return true;
        }
        return false;
    }

    public static boolean isNoDelaySkill(int skillId) {
        return (skillId == 5100015) || (skillId == 21101003) || (skillId == 33101004) || (skillId == 32111010) || (skillId == 2111007) || (skillId == 2211007) || (skillId == 2311007) || (skillId == 22161005) || (skillId == 12111007) || (skillId == 32121003) || (skillId == 35121005) || (skillId == 35111004) || (skillId == 35121013) || (skillId == 35121003) || (skillId == 22150004) || (skillId == 22181004);
    }

    public static int getPartyPlayHP(int mobID) {
        switch (mobID) {
            case 4250000:
                return 836000;
            case 4250001:
                return 924000;
            case 5250000:
                return 1100000;
            case 5250001:
                return 1276000;
            case 5250002:
                return 1452000;
            case 9400661:
                return 15000000;
            case 9400660:
                return 30000000;
            case 9400659:
                return 45000000;
            case 9400658:
                return 20000000;
        }
        return 0;
    }

    public static int getPartyPlayEXP(int mobID) {
        switch (mobID) {
            case 4250000:
                return 5770;
            case 4250001:
                return 6160;
            case 5250000:
                return 7100;
            case 5250001:
                return 7975;
            case 5250002:
                return 8800;
            case 9400661:
                return 40000;
            case 9400660:
                return 70000;
            case 9400659:
                return 90000;
            case 9400658:
                return 50000;
        }
        return 0;
    }

    public static int getPartyPlay(int mapId) {
        switch (mapId) {
            case 300010000:
            case 300010100:
            case 300010200:
            case 300010300:
            case 300010400:
            case 300020000:
            case 300020100:
            case 300020200:
            case 300030000:
            case 683070400:
            case 683070401:
            case 683070402:
                return 25;
        }
        return 0;
    }

    public static int getPartyPlay(int mapId, int def) {
        int dd = getPartyPlay(mapId);
        if (dd > 0) {
            return dd;
        }
        return def / 2;
    }

    public static boolean isHyperTeleMap(int mapId) {
        for (int i : hyperTele) {
            if (i == mapId) {
                return true;
            }
        }
        return false;
    }

    public static int getCurrentDate() {
        String time = FileoutputUtil.CurrentReadable_Time();
        return Integer.parseInt(time.substring(0, 4) + time.substring(5, 7) + time.substring(8, 10) + time.substring(11, 13));
    }

    public static int getCurrentDate_NoTime() {
        String time = FileoutputUtil.CurrentReadable_Time();
        return Integer.parseInt(time.substring(0, 4) + time.substring(5, 7) + time.substring(8, 10));
    }

    public static boolean isFishingMap(int mapid) {
        return (mapid == 749050500) || (mapid == 749050501) || (mapid == 749050502) || (mapid == 970020000) || (mapid == 970020005);
    }

    public static boolean isEventMap(int mapid) {
        return ((mapid >= 109010000) && (mapid < 109050000)) || ((mapid > 109050001) && (mapid < 109090000)) || ((mapid >= 809040000) && (mapid <= 809040100));
    }

    public static boolean isMagicChargeSkill(int skillid) {
        switch (skillid) {
            case 2321001:
                return true;
        }
        return false;
    }

    public static boolean isTeamMap(int mapid) {
        return (mapid == 109080000) || (mapid == 109080001) || (mapid == 109080002) || (mapid == 109080003) || (mapid == 109080010) || (mapid == 109080011) || (mapid == 109080012) || (mapid == 109090300) || (mapid == 109090301) || (mapid == 109090302) || (mapid == 109090303) || (mapid == 109090304) || (mapid == 910040100) || (mapid == 960020100) || (mapid == 960020101) || (mapid == 960020102) || (mapid == 960020103) || (mapid == 960030100) || (mapid == 689000000) || (mapid == 689000010);
    }

    public static int getStatDice(int stat) {
        switch (stat) {
            case 2:
                return 30;
            case 3:
                return 20;
            case 4:
                return 15;
            case 5:
                return 20;
            case 6:
                return 30;
        }
        return 0;
    }

    public static int getDiceStat(int buffid, int stat) {
        if ((buffid == stat) || (buffid % 10 == stat) || (buffid / 10 == stat)) {
            return getStatDice(stat);
        }
        if (buffid == stat * 100) {
            return getStatDice(stat) + 10;
        }
        return 0;
    }

    public static int getMPByJob(int job) {
        switch (job) {
            case 3001:
                return 30;
            case 3100:
                return 90;
            case 3110:
                return 150;
            case 3111:
                return 300;
            case 3112:
                return 360;
        }
        return  0;
    }

    public static int getHpApByJob(int jobId) {
        if (jobId % 1000 / 100 > 5) {
            jobId -= 500;
        }
        if (jobId % 1000 / 100 == 5) {
            switch (jobId / 10) {
                case 51:
                    return 68;
                case 53:
                    return 28;
            }
        }
        switch (jobId / 100) {
            case 21:
                return 30;
            case 22:
                return 12;
            case 31:
                return 38;
            case 32:
                return 20;
        }
        switch (jobId % 1000 / 100) {
            case 0:
                return 8;
            case 1:
                return 50;
            case 2:
                return 6;
            case 3:
            case 4:
                return 16;
            case 5:
                return 18;
        }
        return 8;
    }

    public static int getMpApByJob(int jobId) {
        if ((jobId / 100 == 31) || (jobId / 100 == 65) || (jobId / 100 == 100) || (jobId / 100 == 101)) {
            return 0;
        }
        if (jobId % 1000 / 100 > 5) {
            jobId -= 500;
        }
        switch (jobId / 100) {
            case 22:
                return 72;
            case 32:
                return 69;
        }
        switch (jobId % 1000 / 100) {
            case 0:
                return 57;
            case 1:
                return 53;
            case 2:
                return 79;
            case 3:
            case 4:
                return 61;
            case 5:
                return 65;
        }
        return 57;
    }

    public static Pair<Integer, Integer> getDefaultFaceAndHair(int job, int gender) {
        int face = gender == 0 ? 20100 : 21700;
        int hair = gender == 0 ? 30030 : 31002;
        return new Pair(face, hair);
    }

    public static MapleInventoryType getInventoryType(final int itemId) {
            final byte type = (byte) (itemId / 1000000);
            if (type < 1 || type > 5) {
                return MapleInventoryType.UNDEFINED;
            }
            return MapleInventoryType.getByType(type);
    }

    public static boolean isOverPoweredEquip(MapleClient c, int itemId, short slot) {
        Equip source = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem(slot);
        return source.getAcc() > 600
                || source.getAvoid() > 600
                || source.getDex() > 200
                || source.getEnhance() > 15
                || source.getHands() > 100
                || source.getHp() > 5000
                || source.getInt() > 200
                || source.getJump() > 100
                || source.getSpeed() > 100
                || source.getLuk() > 200
                || source.getMatk() > 500
                || source.getMdef() > 1500
                || source.getMp() > 1000
                || source.getStr() > 200
                || source.getUpgradeSlots() > 32
                || source.getWatk() > 500
                || source.getWdef() > 1500 /*|| source.getLevel() > 32*/;
    }

}
